From: kaf24@firebug.cl.cam.ac.uk Date: Wed, 13 Sep 2006 13:01:23 +0000 (+0100) Subject: [CONSOLED] Shouldn't call domain_create_ring() for a domU which is shutting down. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15658^2~53^2~11 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=80f2588d2b1d9c2aba5fa1a7a0f89c02428f891c;p=xen.git [CONSOLED] Shouldn't call domain_create_ring() for a domU which is shutting down. There is a race condition between domain_create_ring() and the removal of the domU entry from xenstore. If the removal of the domU entry from xenstore comes later than the first xs_gather() call in domain_create_ring(), it will go on and bind the evtchn port to the dying domU, which will cause below error message: (XEN) (file=event_channel.c, line=144) EVTCHNOP failure: domain 0, error -22, line 144 Signed-off-by: Max Zhen --- diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 93f96b101d..8bb18cafab 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -293,12 +293,14 @@ static bool watch_domain(struct domain *dom, bool watch) bool success; sprintf(domid_str, "dom%u", dom->domid); - if (watch) + if (watch) { success = xs_watch(xs, dom->conspath, domid_str); - else + if (success) + domain_create_ring(dom); + } else { success = xs_unwatch(xs, dom->conspath, domid_str); - if (success) - domain_create_ring(dom); + } + return success; }